package com.yulinlin.jdbc.serialize.impl;


import com.yulinlin.jdbc.serialize.IEnum;

import java.lang.reflect.Field;


public class EnumSerialize implements ITypeSerialize<Enum, Object > {

    @Override
    public Object serialize(Enum o) {
        if(o instanceof IEnum){
            return ((IEnum) o).getValue();
        }
        return o.name();
    }

    public Enum unSerialize(Object o,Field f) {
        Enum[] enums = (Enum[]) f.getType().getEnumConstants();
        if(IEnum.class.isAssignableFrom(f.getType())){
            IEnum[] es = (IEnum[])enums;
            for (IEnum anEnum : es) {
                if(anEnum.getValue().equals(o)){
                    return (Enum)anEnum;
                }
            }
        }else{
            for(Enum e:enums){
                if(e.name().equals(o)){
                    return  e;
                }
            }
        }
        return null;
    }

    @Override
    public boolean supportExtend() {
        return true;
    }
}
